#include "head.h"

// TCP 服务器 套接字文件描述符
int UDP_Sock_Server_fd = 0;
// TCP 客户端 套接字文件描述符
int UDP_Sock_Client_fd = 0;



int main(int argc, char const *argv[])
{
    // -------------------- 创建套接字 --------------------
    UDP_Sock_Server_fd = socket( AF_INET , SOCK_DGRAM , 0);
    if (-1 == UDP_Sock_Server_fd)
    {
        printf("创建套接字失败\n");
        return -1;
    }

    // 填写结构体信息
    struct sockaddr_in sock_addr_server;
    memset(&sock_addr_server , 0 , sizeof(sock_addr_server));
    // 协议
    sock_addr_server.sin_family = AF_INET;
    // 端口
    sock_addr_server.sin_port = htons(8080);
    // ip地址
    sock_addr_server.sin_addr.s_addr = inet_addr("192.168.91.99");

    // -------------------- 绑定 --------------------
    if(-1 == bind(UDP_Sock_Server_fd , (struct sockaddr *) & sock_addr_server , sizeof(sock_addr_server)))
    {
        printf("绑定失败\n");
        return 0;
    }


    printf("等待客户连接发送信息\r\n");


    // 客户端信息结构体
    struct sockaddr_in sock_addr_client; 
    // 客户端信息结构体长度
    socklen_t sock_addr_client_len = sizeof(sock_addr_client);
    char send_buf[128] = {0};
    char recv_buf[128] = {0};
    while (1)
    {
        memset(send_buf , 0 , sizeof(send_buf));
        memset(recv_buf , 0 , sizeof(recv_buf));

        recvfrom(UDP_Sock_Server_fd , recv_buf , sizeof(recv_buf) , 0 , \
        (struct sockaddr *) & sock_addr_client , \
        &sock_addr_client_len);

        // 发送对方的 IP 和 端口
        sprintf(  send_buf , "回复 : %s\n" , recv_buf );
        sendto( UDP_Sock_Server_fd ,  send_buf , strlen(send_buf) , 0 , \
        (struct sockaddr *) & sock_addr_client , \
        sock_addr_client_len);

        printf("接收信息:%s\n" , recv_buf );
    }
    
    return 0;
}